//package com.example.dynamicdatasource.config;
//
//import com.alibaba.druid.pool.DruidDataSource;
//import com.example.dynamicdatasource.datasource.DynamicDataSource;
//import com.example.dynamicdatasource.enums.DataSourceType;
//import lombok.extern.slf4j.Slf4j;
//import org.apache.ibatis.session.SqlSessionFactory;
//import org.mybatis.spring.SqlSessionFactoryBean;
//import org.mybatis.spring.annotation.MapperScan;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.beans.factory.annotation.Qualifier;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.boot.context.properties.ConfigurationProperties;
//import org.springframework.boot.jdbc.DataSourceBuilder;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//import org.springframework.context.annotation.Primary;
//import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
//import org.springframework.jdbc.datasource.DataSourceTransactionManager;
//import org.springframework.transaction.PlatformTransactionManager;
//
//import javax.sql.DataSource;
//import java.util.HashMap;
//import java.util.Map;
//
///**
// * @author haitao
// */
//@Configuration
//@Slf4j
//public class DynamicDataSourceConfig {
//
//
//    @Value("${spring.datasource.druid.master.url}")
//    private String masterUrl;
//
//    @Value("${spring.datasource.druid.master.username}")
//    private String masterUser;
//
//    @Value("${spring.datasource.druid.master.password}")
//    private String masterPassword;
//
//    @Value("${spring.datasource.druid.master.driver‐class‐name}")
//    private String masterDriverClass;
//
//
//    @Value("${spring.datasource.druid.cluster.url}")
//    private String clusterUrl;
//
//    @Value("${spring.datasource.druid.cluster.username}")
//    private String clusterUser;
//
//    @Value("${spring.datasource.druid.cluster.password}")
//    private String clusterPassword;
//
//    @Value("${spring.datasource.druid.cluster.driver‐class‐name}")
//    private String clusterDriverClass;
//
//    @Bean(name = "masterDataSource")
//    public DataSource masterDataSource() {
//        DruidDataSource dataSource = new DruidDataSource();
//        dataSource.setDriverClassName(masterDriverClass);
//        dataSource.setUrl(masterUrl);
//        dataSource.setUsername(masterUser);
//        dataSource.setPassword(masterPassword);
//        return dataSource;
//    }
//
//    @Bean(name = "clusterDataSource")
//    public DataSource clusterDataSource() {
//        DruidDataSource dataSource = new DruidDataSource();
//        dataSource.setDriverClassName(clusterDriverClass);
//        dataSource.setUrl(clusterUrl);
//        dataSource.setUsername(clusterUser);
//        dataSource.setPassword(clusterPassword);
//        return dataSource;
//    }
//
//
//
//    /**
//     * 将动态代理数据源对象放入Spring容器中
//     */
//    @Bean(name = "dynamicDataSource")
//    @Primary
//    public DynamicDataSource dynamicDataSource() {
//        // 这个地方是比较核心的targetDataSource 集合是我们数据库和名字之间的映射
//        Map<Object, Object> dataSourceMap = new HashMap<>(2);
//        dataSourceMap.put(DataSourceType.MASTER, masterDataSource());
//        dataSourceMap.put(DataSourceType.CLUSTER, clusterDataSource());
//
//        DynamicDataSource dataSource = new DynamicDataSource();
//        // 设置所有的数据源
//        dataSource.setTargetDataSources(dataSourceMap);
//        // 设置默认使用的数据源对象
//        dataSource.setDefaultTargetDataSource(masterDataSource());
//        log.info("加载动态数据源配置完成～");
//
//        return dataSource;
//    }
//
//    /**
//     * 配置@Transactional注解事物
//     * @return
//     */
//    @Bean
//    public PlatformTransactionManager transactionManager() {
//        return new DataSourceTransactionManager(dynamicDataSource());
//    }
//
//
//}